#include <iostream>
using namespace std;

// 动物类
class Animal
{
public:
    int m_Age;
};

// 利用虚继承可以解决菱形继承的问题
// 在继承之前加上 virtual 变为虚继承
// Animal 类称为 虚基类 会使继承类 继承的是 类的指针，且是同一份数据

// 羊类
class Sheep : virtual public Animal {};

// 驼类
class Tuo : virtual public Animal {};

// 羊驼类
class SheepTuo : public Sheep, public Tuo {};

void test01()
{
    SheepTuo st;
    st.Sheep::m_Age = 18;
    st.Tuo::m_Age = 28;
    // 当出现菱形继承时，两个父类拥有相同的数据，需要加以作用域区分。
    cout <<"st.Sheep::m_Age = " << st.Sheep::m_Age << endl;
    cout <<"st.Tuo::m_Age   = " << st.Tuo::m_Age << endl;
    cout <<"st.m_Age        = " << st.m_Age << endl;

    // 这份数据我们知道只要有一份就可以，菱形继承导致数据有两份，资源浪费
}

int main()
{
    test01();
    return 0;
}